package org.example.t5teste.pages.cadastros;

import java.util.List;

import org.apache.tapestry5.Block;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.example.t5teste.components.Layout;
import org.example.t5teste.entities.Usuarios;
import org.example.t5teste.hibernates.UsuariosHome;
import org.example.t5teste.tools.Util;
import org.hibernate.Session;

public class CadastroUsuarios extends Layout {

	@Persist
	private Usuarios usuariosGrid;

	@Persist
	private Usuarios usuariosBean;

	@Persist
	private String procurar;

	@Persist
	private List<Usuarios> lista;

	@Inject
	private Block grid;

	@Inject
	private Block bean;
	
	@Inject
	private Session session;
	
	@Persist
	private boolean isUpdate;

	void onSubmitFromProcurar() throws Exception {
		final UsuariosHome dao = new UsuariosHome(session);
		lista = dao.getLista(procurar);
	}
	
	@CommitAfter
	void onSubmitFromUsuariosBean() {
		usuariosBean.setUsuario(usuariosBean.getUsuario().toLowerCase());
		final UsuariosHome dao = new UsuariosHome(session);
		if(isUpdate){
			isUpdate = false;
			usuariosBean.setSenha(Util.encrypt(usuariosBean.getSenha().getBytes(), "MD5"));
			dao.merge(usuariosBean);
		} else {
			usuariosBean.setSenha(Util.encrypt(usuariosBean.getSenha().getBytes(), "MD5"));
			dao.persist(usuariosBean);
			lista = dao.getLista(procurar);
		}
		usuariosBean = null;
	}

	void onActionFromClicarId(int id) {
		isUpdate = true;
		for(Usuarios u : lista){
			if(u.getId() == id){
				setUsuariosBean(u);
				break;
			}
		}
	}
	
	void onActionFromNovo() {
		isUpdate = false;
		usuariosBean = new Usuarios();
	}
	
	void onActionFromRetornar() {
		isUpdate = false;
		usuariosBean = null;
	}

	public Object getActiveBlock() {
		if(usuariosBean == null || usuariosBean.getId() < 0){
			return grid;
		} else {
			return bean;
		}
	}

	public void setProcurar(String procurar) {
		this.procurar = procurar;
	}

	public String getProcurar() {
		return procurar;
	}

	public void setLista(List<Usuarios> lista) {
		this.lista = lista;
	}

	public List<Usuarios> getLista() {
		return lista;
	}

	public void setUsuariosGrid(Usuarios usuariosGrid) {
		this.usuariosGrid = usuariosGrid;
	}

	public Usuarios getUsuariosGrid() {
		return usuariosGrid;
	}

	public void setUsuariosBean(Usuarios usuariosBean) {
		this.usuariosBean = usuariosBean;
	}

	public Usuarios getUsuariosBean() {
		return usuariosBean;
	}
}
